<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <button @click="obj.name = 'rose'">修改obj.name</button>
      <button @click="obj.pet.nickname = '老强'">修改obj.pet.nickname</button>
      <button @click="obj = { name: 'rose', age: 19} ">替换obj指向</button>
      <p>{{ obj }}</p>
    </div>
    <script src="./vue.js"></script>
    <script>
      new Vue({
        el: '#app',
        data () {
          return {
            obj: {
              name: 'jack',
              age: 16,
              pet: {
                nickname: '小强',
                age: 1
              }
            }
          }
        },
        // 侦听obj的变化
        watch: {
            // 侦听基本类型有效，侦听复杂类型无效
            // 因为本质上侦听的是栈上的值，栈上的值没变
            // obj () {
            //     console.log('obj改变了')
            // }

            // 我希望对象的属性改变也能侦听到，就要用深度侦听
            obj: {
              // 开启深度侦听 -- 对象里的任意属性都能侦听得到，包括对象里的对象的属性
              deep: true,
              // 当数据有改变就调用的回调函数
              handler () {
                console.log('obj改变了')
              },
              // 要不要初始化调用一次
              immediate: true
            }
        }
      })
    </script>
  </body>
</html>
